package com.cdeledu.唤醒指定线程;

import java.util.concurrent.locks.LockSupport;

/**:Java中有木有一个办法唤醒一个“指定的”线程。
熟悉线程操作的小朋友应该知道，Java中线程的挂起和唤醒一般用synchronized + wait + notify完成。
比如：
synchronized(o) {
o.wait(); //wait状态
}
在其他线程中o.notify()，就可以唤醒在o上wait的线程。
可是如果o上有多个线程wait，是没有办法唤醒“指定”的某个线程的。
不过，Java6之后，转机来了，Java6引入了LockSupport这个类。

如上所述，LockSupport的park可以让当前线程进入wait状态，
而unpark可以解除指定线程的wait态，不需要拥有某个对象的特定锁。
 * @author DELL
 *
 */
public class LockSupportTest {

	public static void main(String[] args) throws Exception {
		Thread t = new Thread(() -> {
			System.out.println("start");
			try {
				Thread.sleep(2000);
			} catch (Exception e) {
				
			}
			// 如果让unpark先执行，则这里调用park就不会阻塞
			LockSupport.park(); // 一直wait
			System.out.println("continue");
		});
		t.start();

		Thread.sleep(1000);
		LockSupport.unpark(t); // 指定t线程解除wait态
	}

}
